home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2001 December / december_2001.iso / Browsers / Netscape 6.1 / mail.xpi / install.js
Encoding:
JavaScript  |  2001-07-27  |  12.4 KB  |  405 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment(file + " file: " + fFileToDelete);
  31.   if(File.exists(fFileToDelete))
  32.   {
  33.     fileDelete(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder (recursively) if it exists
  41. function deleteThisFolder(dirKey, folder)
  42. {
  43.   var fToDelete;
  44.  
  45.   fToDelete = getFolder(dirKey, folder);
  46.   logComment(folder + " folder: " + fToDelete);
  47.   if(File.exists(fToDelete))
  48.   {
  49.     File.dirRemove(fToDelete, true);
  50.     return(true);
  51.   }
  52.   else
  53.     return(false);
  54. }
  55.  
  56. // OS type detection
  57. // which platform?
  58. function getPlatform()
  59. {
  60.   var platformStr;
  61.   var platformNode;
  62.  
  63.   if('platform' in Install)
  64.   {
  65.     platformStr = new String(Install.platform);
  66.  
  67.     if (!platformStr.search(/^Macintosh/))
  68.       platformNode = 'mac';
  69.     else if (!platformStr.search(/^Win/))
  70.       platformNode = 'win';
  71.     else
  72.       platformNode = 'unix';
  73.   }
  74.   else
  75.   {
  76.     var fOSMac  = getFolder("Mac System");
  77.     var fOSWin  = getFolder("Win System");
  78.  
  79.     logComment("fOSMac: "  + fOSMac);
  80.     logComment("fOSWin: "  + fOSWin);
  81.  
  82.     if(fOSMac != null)
  83.       platformNode = 'mac';
  84.     else if(fOSWin != null)
  85.       platformNode = 'win';
  86.     else
  87.       platformNode = 'unix';
  88.   }
  89.  
  90.   return platformNode;
  91. }
  92.  
  93. function updateWinReg4Ren8dot3() 
  94. {
  95.   var fProgram      = getFolder("Program");
  96.   var fTemp         = getFolder("Temporary");
  97.  
  98.   //Notes:
  99.   // can't use a double backslash before subkey - Windows already puts it in.            
  100.   // subkeys have to exist before values can be put in.
  101.   var subkey;  // the name of the subkey you are poking around in
  102.   var valname; // the name of the value you want to look at
  103.   var value;   // the data in the value you want to look at.
  104.   var winreg = getWinRegistry() ;
  105.  
  106.   if(winreg != null) 
  107.   {
  108.     // Here, we get the current version.
  109.     winreg.setRootKey(winreg.HKEY_CURRENT_USER) ;  // CURRENT_USER
  110.     subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ;
  111.  
  112.     winreg.createKey(subkey,"");
  113.     valname = "ren8dot3";
  114.     value   = fProgram + "ren8dot3.exe " + fTemp + "ren8dot3.ini";
  115.     err     = winreg.setValueString(subkey, valname, value);
  116.   }
  117. }
  118.  
  119. function prepareRen8dot3(listLongFilePaths)
  120. {
  121.   var fTemp                 = getFolder("Temporary");
  122.   var fProgram              = getFolder("Program");
  123.   var fRen8dot3Ini          = getWinProfile(fTemp, "ren8dot3.ini");
  124.   var bIniCreated           = false;
  125.   var fLongFilePath;
  126.   var sShortFilePath;
  127.  
  128.   if(fRen8dot3Ini != null)
  129.   {
  130.     for(i = 0; i < listLongFilePaths.length; i++)
  131.     {
  132.       fLongFilePath   = getFolder(fProgram, listLongFilePaths[i]);
  133.       sShortFilePath  = File.windowsGetShortName(fLongFilePath);
  134.       if(sShortFilePath)
  135.       {
  136.         fRen8dot3Ini.writeString("rename", sShortFilePath, fLongFilePath);
  137.         bIniCreated = true;
  138.       }
  139.     }
  140.  
  141.     if(bIniCreated)
  142.       updateWinReg4Ren8dot3() ;
  143.   }
  144.  
  145.   return(0);
  146. }
  147.  
  148. function registerProgramFolderKey(winreg, fFolderPath)
  149. {
  150.   var subkey;
  151.   var valname;
  152.   var value;
  153.   var err;
  154.  
  155.   /* set the Program Folder Path in the Mozilla key in the Windows Registry */
  156.   subkey  = "SOFTWARE\\Netscape";
  157.   winreg.createKey(subkey,"");
  158.  
  159.   valname = "CurrentVersion";
  160.   subkey  = "SOFTWARE\\Netscape\\Netscape 6";
  161.   winreg.createKey(subkey,"");
  162.  
  163.   valname = "CurrentVersion";
  164.   value   = "6.1 (en)";
  165.   err     = winreg.setValueString(subkey, valname, value);
  166.  
  167.   subkey  = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)";
  168.   winreg.createKey(subkey,"");
  169.  
  170.   subkey  = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)\\Main";
  171.   winreg.createKey(subkey,"");
  172.  
  173.   valname = "Program Folder Path";
  174.   value   = fFolderPath;
  175.   err     = winreg.setValueString(subkey, valname, value);
  176. }
  177.  
  178. function createShortcuts() 
  179. {
  180.   var subkey;
  181.   var valname;
  182.   var szStartMenuPrograms;
  183.   var szStartMenu;
  184.   var szFolderDesktop;
  185.   var szFolderQuickLaunch;
  186.   var szFolderSendTo;
  187.   var winreg;
  188.   var fWindows;
  189.   var fTemp;
  190.   var fProgram;
  191.   var fileExe;
  192.   var scExeDesc;
  193.   var scProfileDesc;
  194.   var scProfileDescParam;
  195.   var scFolderName;
  196.   var fFolderDesktop;
  197.   var fFolderPath;
  198.   var fFolderPathStr;
  199.   var is_winnt;
  200.   var szCurrentVersion;
  201.   var restrictedAccess;
  202.   var ikwDefined;
  203.  
  204.   winreg               = getWinRegistry();
  205.   fWindows             = getFolder("Windows");
  206.   fProgram             = getFolder("Program");
  207.   fTemp                = fProgram + "Netscp6.exe";
  208.   fileExe              = getFolder("file:///", fTemp);
  209.   scExeDesc            = "Mail";
  210.   scParam              = "-mail";
  211.   scFolderName         = "Netscape 6";
  212.   if(winreg != null) 
  213.   {
  214.     /* This will check to see if the user has restricted access or not.
  215.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  216.      * it is, then access is not restricted.  This is only used to
  217.      * determine which Desktop, Programs, and Start Menu folders
  218.      * are to used: common or per user
  219.      */
  220.     restrictedAccess = false;
  221.     ikwDefined = typeof(winreg.isKeyWritable);
  222.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  223.     if(ikwDefined == "function")
  224.     {
  225.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  226.       if(!winreg.isKeyWritable("SOFTWARE"))
  227.         restrictedAccess = true;
  228.     }
  229.  
  230.     /* determine if the script is running under NT or not */
  231.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  232.     subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  233.     valname             = "CurrentVersion";
  234.     szCurrentVersion    = winreg.getValueString(subkey, valname);
  235.     logComment("szCurrentVersion: " + szCurrentVersion);
  236.     if((szCurrentVersion == "") || (szCurrentVersion == null))
  237.     {
  238.       is_winnt = false;
  239.     }
  240.     else
  241.     {
  242.       is_winnt = true;
  243.     }
  244.  
  245.     logComment("is_winnt value: " + is_winnt);
  246.     logComment("restrictedAccess value: " + restrictedAccess);
  247.     if(!is_winnt || restrictedAccess)
  248.     {
  249.       winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  250.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  251.       valname             = "Programs";
  252.       szStartMenuPrograms = winreg.getValueString(subkey, valname);
  253.       valname             = "Start Menu";
  254.       szStartMenu         = winreg.getValueString(subkey, valname);
  255.       valname             = "Desktop";
  256.       szFolderDesktop     = winreg.getValueString(subkey, valname);
  257.     }
  258.     else
  259.     {
  260.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  261.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  262.       valname             = "Common Programs";
  263.       szStartMenuPrograms = winreg.getValueString(subkey, valname);
  264.       valname             = "Common Start Menu";
  265.       szStartMenu         = winreg.getValueString(subkey, valname);
  266.       valname             = "Common Desktop";
  267.       szFolderDesktop     = winreg.getValueString(subkey, valname);
  268.     }
  269.  
  270.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  271.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  272.     valname             = "SendTo";
  273.     szFolderSendTo      = winreg.getValueString(subkey, valname);
  274.  
  275.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups";
  276.     valname             = "Quick Launch";
  277.     szFolderQuickLaunch = winreg.getValueString(subkey, valname);
  278.  
  279.     subkey              = "SOFTWARE\\Netscape\\Netscape 6\\6.1 (en)\\Main";
  280.     valname             = "Program Folder Path";
  281.     fFolderPathStr      = winreg.getValueString(subkey, valname);
  282.     if((fFolderPathStr == "") || (fFolderPathStr == null))
  283.     {
  284.       fTemp       = szStartMenuPrograms + "\\" + scFolderName;
  285.       fFolderPath = getFolder("file:///", fTemp);
  286.     }
  287.     else
  288.     {
  289.       /* convert the path string to a path folder object */
  290.       fFolderPath = getFolder("file:///", fFolderPathStr);
  291.     }
  292.     /* convert the path string to a path folder object */
  293.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  294.  
  295.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  296.     logComment("Folder StartMenu        : " + szStartMenu);
  297.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  298.     logComment("Folder FolderSendTo     : " + szFolderSendTo);
  299.     logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch);
  300.     logComment("fileExe                 : " + fileExe);
  301.     logComment("fFolderPath             : " + fFolderPath);
  302.     logComment("scExeDesc               : " + scExeDesc);
  303.     logComment("fProgram                : " + fProgram);
  304.  
  305.     /* explicitly create the fFolderPath even though the windowsShortcut function creates the folder.
  306.      * This is so that the folder creation gets logged for uninstall to remove it. */
  307.     if(!File.exists(fFolderPath))
  308.       File.dirCreate(fFolderPath);
  309.  
  310.     /* create the shortcuts */
  311.     File.windowsShortcut(fileExe, fFolderPath, scExeDesc, fProgram, scParam, fileExe, 0);
  312.  
  313.     if(!restrictedAccess)
  314.     {
  315.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  316.       registerProgramFolderKey(winreg, fFolderPath);
  317.     }
  318.  
  319.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  320.     registerProgramFolderKey(winreg, fFolderPath);
  321.   }
  322.   else
  323.   {
  324.     logComment("winreg is null");
  325.   }
  326. }
  327.  
  328. function upgradeCleanup()
  329. {
  330.   // Obsolete files from Netscape 6.0 and Netscape 6.01 that
  331.   // need to be cleaned up.
  332.   deleteThisFile("Components", "signed.dll");
  333. }
  334.  
  335. // main
  336. var srDest;
  337. var err;
  338. var communicatorFolder;
  339.  
  340. // This list contains filenames that are long filenames ( > 8.3) critical during installation time.
  341. // This list is automatically generated during the build process.
  342. // The filenames should include paths relative to the Netscape 6 folder.
  343. // '/' must be used as path delimiters regardless of platform.
  344. var listLongFilePaths = ["chrome/messenger.jar",
  345.                          "components/nsAB4xUpgrader.dll",
  346.                          "nsldap32v40.dll"];
  347.  
  348. srDest = 3137;
  349. err    = initInstall("Netscape Mail", "Mail", "6.10.0.2001072700"); 
  350. logComment("initInstall: " + err);
  351.  
  352. communicatorFolder = getFolder("Program");
  353. logComment("communicatorFolder: " + communicatorFolder);
  354.  
  355. if(verifyDiskSpace(communicatorFolder, srDest))
  356. {
  357.   setPackageFolder(communicatorFolder);
  358.  
  359.   // Ren8dot3 process needs to be done before any files have been installed
  360.   // (this includes the temp files during the prepare phase)
  361.   prepareRen8dot3(listLongFilePaths);
  362.  
  363.   err = addDirectory("",
  364.                      "6.10.0.2001072700",
  365.                      "bin",              // dir name in jar to extract 
  366.                      communicatorFolder, // Where to put this file (Returned from getFolder) 
  367.                      "",                 // subdir name to create relative to communicatorFolder
  368.                      true );             // Force Flag 
  369.   logComment("addDirectory() returned: " + err);
  370.  
  371.   // check return value
  372.   if( err == SUCCESS )
  373.   {
  374.     createShortcuts();
  375.     upgradeCleanup();
  376.  
  377.     // we don't want to fail on errors for the above
  378.     resetError();
  379.  
  380.     // register chrome
  381.     registerChrome(CONTENT | DELAYED_CHROME,
  382.                    getFolder("Chrome","messenger.jar"),
  383.                    "content/messenger/");
  384.     registerChrome(CONTENT | DELAYED_CHROME,
  385.                    getFolder("Chrome","messenger.jar"),
  386.                    "content/messenger-region/");
  387.  
  388.     // check return value
  389.     err = getLastError();
  390.     if(err == SUCCESS)
  391.     {
  392.       err = performInstall(); 
  393.       logComment("performInstall() returned: " + err);
  394.     }
  395.     else
  396.       cancelInstall(err);
  397.   }
  398.   else
  399.     cancelInstall(err);
  400. }
  401. else
  402.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  403.  
  404. // end main
  405.